# 购物系统业务需求

# 问题：商品编号如果输入字符，怎么解决
# 即需要寻找一个判断字符串的函数方法，如果输入字符串，输出：商品编号不规范，请重新输入
# 可以尝试 type(n) == 'str'
# 已尝试，由于n强制转换为int类型，因此不支持字符串格式，尝试失败

# 大致需求
# 购物状态判断
import datetime
import random

# 用户账户有钱 —— 变量：账户 约束：账户余额 > 0
count = 300

# 用户进入商城后，可推一个空购物车 创建一个名为购物车的空列表
# 同时创建一个scl列表存储商品编号，创建一个scv列表存储商品价格
sc = []
scl = []
scv = []
# 开始购物，将想要的商品放入购物车 商品从列表挑选，因此需要一个商品列表
cl = ['01牛奶','02薯片','03可乐','04空调','05风扇','06梳子','07发箍',
      '08洗头膏','09沐浴露','10洗面奶','11洗脸巾','12睡衣','13拖鞋',
      '14发卡','15澡巾','16案板','17小刀','18笔记本','19毛笔','20钢笔',
      '21水笔','22橡皮','23内衣']
# 如果使用列表的方式添加商品，则需要再创建一个价格列表
vl = [22, 6, 4, 2998, 660, 16, 10, 89, 69, 49, 9,
      128, 12, 6, 13, 360, 20, 12, 12, 36, 4, 2, 39]
# 首先抽取优惠券，对大额商品进行八折优惠，pl列表存储可优惠的商品编号
pl = [4, 5, 8, 9, 10, 12, 13, 16, 20, 23]
pre = 0
if count <= 0:
    print("账户余额不足,请充值后选购！充值后您可购买以下商品：")
    corq = 'quit'
else:
# 随机抽取 可以添加询问选择是否抽取
    p = input("您有一次免费抽取优惠券的机会，是否抽取？（Y/N）")
    if p == 'Y':
        r = random.choice(pl)
        vl[r-1] = int(0.8 * vl[r-1])
        print("您抽中的优惠商品为{}，优惠价格为{}".format(cl[r-1], vl[r-1]))
    else:
        print("您未抽取优惠~")

corq = input("是否进入选购？（C/Q）：")
if corq == 'C':
# 首先展示商品，让顾客选购
    for i in range(len(cl)) :
        print(cl[i], end='\t \t')
        if (i+1) % 4 == 0 :
            print()
    print()
else:
    print("结束选购，欢迎下次光临~")
# 开始购物 前提条件：账户余额 > 0 √ corq = C √
while corq == 'C' or corq == 'R':
# 往购物车里添加商品 首先看商品列表里面有没有这个商品
    if corq == 'C':
        n = int(input("请输入您所要购买商品的商品编号："))
    # 如果没有 则输出 暂时未提供此件商品，请重新选购
        if n <= 0 or n > 23 :
            print("无此商品编号，请在以下商品中选购！")
            for i in range(len(cl)):
                print(cl[i], end='\t \t')
                if (i + 1) % 4 == 0:
                    print()
            print()
    # 如果有 则先将商品价格与余额比对，如果余额不足，则添加购物车失败 输出 余额不足，再看看其他商品吧~
        else:
            m = n - 1
            if count - vl[m] < 0 :
                print("余额不足，选购失败！再看看其他商品吧~")
            else :
                count = count - vl[m]
                pre = pre + vl[m]
                print("选购成功！您的账户余额为{}".format(count))
                sc.append(cl[m])
                scl.append(n)
                scv.append(vl[m])
    # 每次添加完商品后，询问客人是否要继续选购，如果结束选购，则输入quit，退出选购，打印小票
            corq = input("是否继续选购？退出选购请输入Q（quit），继续选购请输入C（continue），申请退货请输入R（return）:")
# 申请退货，首先看商品在不在购物车里，即将商品编号与scl列表中的商品编号进行比较，如果没有，则输出未选购该商品
    if corq == 'R':
        # 有三种情况，商品编号是否符合格式（暂时不考虑），商品编号是否在可选范围内，商品是否在购物车内
        print("您已选购：")
        for i in range(len(sc)):
            print(sc[i], end='\t \t')
            if (i + 1) % 4 == 0:
                print()
        if len(sc) % 4 != 0:
            print()
        n = int(input("请输入您想退货的商品编号："))
        if n <= 0 or n > 23:
            print("错误的商品编号，无法进行退货！")
        else:
            if n in scl:
                m = n - 1
                count = count + vl[m]
                pre = pre - vl[m]
                x = scl.index(n)
                sc.pop(x)
                scl.pop(x)
                scv.pop(x)
                print("退货成功！您的账户余额为{}".format(count))
            else:
                print("未选购此商品，退货失败！")
        corq = input("是否继续选购？退出选购请输入Q（quit），继续选购请输入C（continue），继续退货请输入R（return）：")

# 打印购物小条 —— 输出购物车列表 显示都购买了什么
# 如果购物车为空，则不输出小票，需要一个判空操作
if len(sc) == 0:
    pass
else:
    print("请收好您的小票~", end='\n')
    print(datetime.date.today())
    print("您的余额为{}".format(count))
    print("您总共购买了{}件商品，一共消费{}元".format(len(sc), pre))
    print("您此次消费购买商品有：")
    print("商品编号", end='\t \t')
    print("商品价格")
    for i in range(len(sc)):
        print(sc[i],end='\t \t')
        print("{}yuan".format(scv[i]))
    print()
